let fs = require('fs');
let path = require('path');

// 可读流与可写流的基本操作
// var from = fs.createReadStream(path.join(__dirname, 'test', 'demo1.txt'));
// var to = fs.createWriteStream(path.join(__dirname, 'test', 'demo3.txt'));
// from.pipe(to);

// 可读流的分析
// var rs = fs.createReadStream(path.join(__dirname, 'test', 'demo1.txt'),{
//   highWaterMark:3
// });
// rs.on('data', (chunk) => {
//   console.log(`接收到 ${chunk.length} 个字节的数据`);
//   console.log(`${chunk.toString()}`);
//   // rs.pause()
// });
// rs.on('end', (chunk) => {
//   console.log(`end`);
// });


// 讲解缓冲区的概念
// let ws = fs.createWriteStream('./2.txt', {
//   flags: 'w',
//   encoding: 'utf8',
//   highWaterMark: 3
// });
// let i = 9;

// function write() {
//   let flag = true;
//   while (i && flag) {
//     flag = ws.write(i+'');
//     i--;
//     // console.log(flag);
//   }
// }
// write();
// ws.on('drain', () => {
//   console.log("drain");
//   // write();
// });


// 使用事件的方式操作读写流
var rs = fs.createReadStream(path.join(__dirname, 'test', 'demo1.txt'));
var ws = fs.createWriteStream(path.join(__dirname, 'test', 'demo2.txt'));

// 读到数据出发的事件
rs.on('data', function (data) {
  var flag = ws.write(data);
  if (!flag)
    rs.pause();
});
// 缓冲区的文件，消耗完触发的事件
ws.on('drain', function () {
  rs.resume();
});
// 数据读完了触发的事件
rs.on('end', function () {
  ws.end();
});


